package com.kay.car.util;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;

public class HttpUtil {
	public static String post(String url, String parms) {
		// Post请求的url，与get不同的是不需要带参数
		try {
			URL postUrl = new URL(url);
			// 打开连接
			HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
			// 设置是否向connection输出，因为这个是post请求，参数要放在
			// http正文内，因此需要设为true
			connection.setDoOutput(true);
			// Read from the connection. Default is true.
			connection.setDoInput(true);
			// 默认是 GET方式
			connection.setRequestMethod("POST");
			// Post 请求不能使用缓存
			connection.setUseCaches(false);
			//设置本次连接是否自动重定向
			connection.setInstanceFollowRedirects(true);
			// 配置本次连接的Content-type，配置为application/x-www-form-urlencoded的
			// 意思是正文是urlencoded编码过的form参数
			connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
			// 连接，从postUrl.openConnection()至此的配置必须要在connect之前完成，
			// 要注意的是connection.getOutputStream会隐含的进行connect。
			connection.connect();
			DataOutputStream out = new DataOutputStream(connection
					.getOutputStream());
			// 正文，正文内容其实跟get的URL中 '? '后的参数字符串一致
			// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面
			out.write(parms.getBytes("UTF-8"));
			//流用完记得关
			out.flush();
			out.close();
			//获取响应
			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
			String result = "";
			String line;
			while ((line = reader.readLine()) != null){
				result = result + line;
			}

			reader.close();
			//该干的都干完了,记得把连接断了
			connection.disconnect();
			return result;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static String post(String url, String parms, HashMap<String, String> header) {
		// Post请求的url，与get不同的是不需要带参数
		try {
			URL postUrl = new URL(url);
			// 打开连接
			HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();


			// 设置是否向connection输出，因为这个是post请求，参数要放在
			// http正文内，因此需要设为true
			connection.setDoOutput(true);
			// Read from the connection. Default is true.
			connection.setDoInput(true);
			// 默认是 GET方式
			connection.setRequestMethod("POST");
			// Post 请求不能使用缓存
			connection.setUseCaches(false);
			//设置本次连接是否自动重定向
			connection.setInstanceFollowRedirects(true);
			// 配置本次连接的Content-type，配置为application/x-www-form-urlencoded的
			// 意思是正文是urlencoded编码过的form参数

			for (String key : header.keySet()) {
				connection.setRequestProperty(key, header.get(key));
			}

			// 连接，从postUrl.openConnection()至此的配置必须要在connect之前完成，
			// 要注意的是connection.getOutputStream会隐含的进行connect。
			connection.connect();
			DataOutputStream out = new DataOutputStream(connection
					.getOutputStream());
			// 正文，正文内容其实跟get的URL中 '? '后的参数字符串一致
			// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面
			out.write(parms.getBytes("UTF-8"));
			//流用完记得关
			out.flush();
			out.close();
			//获取响应
			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
			String result = "";
			String line;
			while ((line = reader.readLine()) != null){
				result = result + line;
			}

			reader.close();
			//该干的都干完了,记得把连接断了
			connection.disconnect();
			return result;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}


	public static String get(String url, String parms){
		// 拼凑get请求的URL字串，使用URLEncoder.encode对特殊和不可见字符进行编码
		String getURL = url + "?" + parms;
		try {
			URL getUrl = new URL(getURL);
			// 根据拼凑的URL，打开连接，URL.openConnection函数会根据URL的类型，
			// 返回不同的URLConnection子类的对象，这里URL是一个http，因此实际返回的是HttpURLConnection
			HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
			// 进行连接，但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到服务器
			connection.connect();
			// 取得输入流，并使用Reader读取
			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 设置编码,否则中文乱码
			String result = "";
			String line;
			while ((line = reader.readLine()) != null) {
				// lines = new String(lines.getBytes(), "utf-8");
				result = result + line;
			}
			reader.close();
			// 断开连接
			connection.disconnect();
			return result;
		}catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static String get(String url, String parms, HashMap<String, String> header){

		// 拼凑get请求的URL字串，使用URLEncoder.encode对特殊和不可见字符进行编码
		String getURL = url + "?" + parms;
		try {
			URL getUrl = new URL(getURL);
			// 根据拼凑的URL，打开连接，URL.openConnection函数会根据URL的类型，
			// 返回不同的URLConnection子类的对象，这里URL是一个http，因此实际返回的是HttpURLConnection
			HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();

			for (String key : header.keySet()) {
				connection.setRequestProperty(key, header.get(key));
			}

			// 进行连接，但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到服务器
			connection.connect();
			// 取得输入流，并使用Reader读取
			BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 设置编码,否则中文乱码
			String result = "";
			String line;
			while ((line = reader.readLine()) != null) {
				// lines = new String(lines.getBytes(), "utf-8");
				result = result + line;
			}
			reader.close();
			// 断开连接
			connection.disconnect();
			return result;
		}catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
	}
}
